package com.huahua.api.service;

import com.huahua.api.entity.param.clipboard.*;
import com.huahua.api.entity.vo.clipboard.RandomPasswordVO;
import com.huahua.api.entity.vo.clipboard.WebClipboardVO;
import reactor.core.publisher.Mono;

/**
 * @author Huahua-Ai
 * @date 2025-01-21 22:20:00
 * @description 网络剪贴板服务接口
 */
public interface WebClipboardService {

    /**
     * 创建剪贴板
     *
     * @param param 创建参数
     * @return 剪贴板信息
     */
    Mono<WebClipboardVO> createClipboard(CreateClipboardParam param);

    /**
     * 获取剪贴板内容
     *
     * @param param 获取参数（分享ID和密码）
     * @return 剪贴板信息
     */
    Mono<WebClipboardVO> getClipboard(GetClipboardParam param);

    /**
     * 更新剪贴板内容
     *
     * @param param 更新参数
     * @return 更新后的剪贴板信息
     */
    Mono<WebClipboardVO> updateClipboard(UpdateClipboardParam param);

    /**
     * 修改访问密码
     *
     * @param param 修改访问密码参数
     * @return 是否修改成功
     */
    Mono<Boolean> changeAccessPassword(ChangeAccessPasswordParam param);

    /**
     * 修改管理员密码
     *
     * @param param 修改管理员密码参数
     * @return 是否修改成功
     */
    Mono<Boolean> changeAdminPassword(ChangeAdminPasswordParam param);

    /**
     * 生成随机访问密码
     *
     * @param param 生成随机访问密码参数
     * @return 新的随机访问密码
     */
    Mono<RandomPasswordVO> generateRandomAccessPassword(GenerateRandomAccessPasswordParam param);

    /**
     * 生成随机管理员密码
     *
     * @param param 生成随机管理员密码参数
     * @return 新的随机管理员密码
     */
    Mono<RandomPasswordVO> generateRandomAdminPassword(GenerateRandomAdminPasswordParam param);

    /**
     * 设置编辑权限
     *
     * @param param 设置编辑权限参数
     * @return 更新后的剪贴板信息
     */
    Mono<WebClipboardVO> setEditable(SetEditableParam param);

    /**
     * 设置剪贴板过期时间
     *
     * @param param 设置参数（分享ID、密码和新的过期时间）
     * @return 更新后的剪贴板信息
     */
    Mono<WebClipboardVO> setExpireTime(ExtendExpireParam param);

    /**
     * 删除剪贴板
     *
     * @param param 删除参数（分享ID和密码）
     * @return 是否删除成功
     */
    Mono<Boolean> deleteClipboard(DeleteClipboardParam param);

    /**
     * 清理过期剪贴板
     *
     * @return 清理的数量
     */
    Mono<Integer> cleanExpiredClipboards();

    /**
     * 生成唯一的分享ID
     *
     * @return 唯一分享ID
     */
    Mono<String> generateUniqueShareId();

    /**
     * 生成默认密码（6位数字）
     *
     * @return 6位数字密码
     */
    String generateDefaultPassword();

    /**
     * 检查是否允许无密码访问
     *
     * @param param 检查参数（分享ID）
     * @return 是否允许无密码访问
     */
    Mono<Boolean> checkPasswordFreeAccess(CheckPasswordFreeAccessParam param);
}